#include <iostream>
#include <string>
#include <vector>
#include <sstream>

// 函数声明
void ls(const std::vector<std::string>& args);
void pwd(const std::vector<std::string>& args);
void cd(const std::vector<std::string>& args);
void help(const std::vector<std::string>& args);
void executeCommand(const std::vector<std::string>& args);

// 主函数
int main() {
    std::string line;
    while (true) {
        std::cout << "myshell> ";
        std::getline(std::cin, line);
        std::istringstream iss(line);
        std::vector<std::string> args{std::istream_iterator<std::string>{iss},
                                      std::istream_iterator<std::string>{}};

        if (args.empty()) continue;

        executeCommand(args);
    }
    return 0;
}

// 执行命令的函数
void executeCommand(const std::vector<std::string>& args) {
    std::string command = args[0];

    if (command == "ls") {
        ls(args);
    } else if (command == "pwd") {
        pwd(args);
    } else if (command == "cd") {
        cd(args);
    } else if (command == "help") {
        help(args);
    } else {
        std::cout << "Unknown command: " << command << std::endl;
    }
}

// 实现 ls 命令
void ls(const std::vector<std::string>& args) {
    // 这里只是一个示例，实际上你需要调用系统命令来列出目录内容
    std::cout << "Listing directory contents..." << std::endl;
}

// 实现 pwd 命令
void pwd(const std::vector<std::string>& args) {
    // 这里只是一个示例，实际上你需要调用系统命令来获取当前工作目录
    std::cout << "Present Working Directory: /home/user" << std::endl;
}

// 实现 cd 命令
void cd(const std::vector<std::string>& args) {
    if (args.size() != 2) {
        std::cout << "Usage: cd <directory>" << std::endl;
        return;
    }
    // 这里只是一个示例，实际上你需要调用系统命令来改变目录
    std::cout << "Changing directory to " << args[1] << "..." << std::endl;
}

// 实现 help 命令
void help(const std::vector<std::string>& args) {
    std::cout << "Available commands:" << std::endl;
    std::cout << "  ls               - List directory contents" << std::endl;
    std::cout << "  pwd              - Print working directory" << std::endl;
    std::cout << "  cd <directory>   - Change directory" << std::endl;
    std::cout << "  help             - Show help message" << std::endl;
}
